package com.smartsystem.common.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j配置类
 * 用于生成API文档
 */
@Configuration
public class Knife4jConfig {

    /**
     * 创建OpenAPI信息
     */
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("智慧超市管理系统API文档")
                        .description("智慧超市管理系统后端接口文档，提供完整的RESTful API服务")
                        .version("v1.0.0")
                        .contact(new Contact()
                                .name("开发团队")
                                .email("dev@smartsystem.com")
                                .url("https://github.com/smartsystem"))
                        .license(new License()
                                .name("MIT License")
                                .url("https://opensource.org/licenses/MIT")));
    }

    /**
     * 用户认证模块API分组
     */
    @Bean
    public GroupedOpenApi authApi() {
        return GroupedOpenApi.builder()
                .group("01-用户认证")
                .pathsToMatch("/api/v1/auth/**")
                .build();
    }

    /**
     * 系统管理模块API分组
     */
    @Bean
    public GroupedOpenApi systemApi() {
        return GroupedOpenApi.builder()
                .group("02-系统管理")
                .pathsToMatch("/api/v1/system/**")
                .build();
    }

    /**
     * 商品管理模块API分组
     */
    @Bean
    public GroupedOpenApi productApi() {
        return GroupedOpenApi.builder()
                .group("03-商品管理")
                .pathsToMatch("/api/v1/product/**")
                .build();
    }

    /**
     * 库存管理模块API分组
     */
    @Bean
    public GroupedOpenApi inventoryApi() {
        return GroupedOpenApi.builder()
                .group("04-库存管理")
                .pathsToMatch("/api/v1/inventory/**")
                .build();
    }

    /**
     * 采购管理模块API分组
     */
    @Bean
    public GroupedOpenApi purchaseApi() {
        return GroupedOpenApi.builder()
                .group("05-采购管理")
                .pathsToMatch("/api/v1/purchase/**")
                .build();
    }

    /**
     * 销售管理模块API分组
     */
    @Bean
    public GroupedOpenApi salesApi() {
        return GroupedOpenApi.builder()
                .group("06-销售管理")
                .pathsToMatch("/api/v1/sales/**")
                .build();
    }

    /**
     * 财务管理模块API分组
     */
    @Bean
    public GroupedOpenApi financeApi() {
        return GroupedOpenApi.builder()
                .group("07-财务管理")
                .pathsToMatch("/api/v1/finance/**")
                .build();
    }

    /**
     * 报表统计模块API分组
     */
    @Bean
    public GroupedOpenApi reportApi() {
        return GroupedOpenApi.builder()
                .group("08-报表统计")
                .pathsToMatch("/api/v1/report/**")
                .build();
    }

    /**
     * 测试接口API分组
     */
    @Bean
    public GroupedOpenApi testApi() {
        return GroupedOpenApi.builder()
                .group("99-测试接口")
                .pathsToMatch("/api/test/**")
                .build();
    }
}